package process

import (
	"chat-cli/message"
	"chat-cli/utils"
	"encoding/json"
	"fmt"
	"log"
)

type PmsProcess struct{}

func (pp *PmsProcess) SendPrivateMes(content string, userId int) (err error) {
	//构造发送的数据包
	var mes message.Message
	mes.Type = message.PrivateMesType
	var smsMes message.PrivateMes
	smsMes.Content = content
	smsMes.SendUser = CurUser.User
	smsMes.RecUserId = userId
	data, err := json.Marshal(smsMes)
	if err != nil {
		return fmt.Errorf("私发消息序列化异常 1 : %w", err)
	}
	mes.Data = string(data)
	data, err = json.Marshal(mes)
	if err != nil {
		return fmt.Errorf("私发消息序列化异常 2 : %w", err)
	}
	//老套路 构建完成后 进行发送  conn在CurUser里面就有
	tf := &utils.Transfer{
		Conn: CurUser.Conn,
	}
	err = tf.WritePkg(data)
	if err != nil {
		return fmt.Errorf("私发消息发送异常  : %w", err)
	}
	return
}

func (pp *PmsProcess) OutputPrivateMes(mes *message.Message) {
	//这里接收的消息有可能并不是自己的  因为服务器维护的用户列表 不确定会不会出错 如果不是自己的就报错 然后丢掉把 防止可能出现的错误
	var privateMes message.PrivateMes
	err := json.Unmarshal([]byte(mes.Data), &privateMes)
	if err != nil {
		log.Println("接收私聊消息反序列化异常:", err)
	}
	if privateMes.RecUserId != CurUser.UserId {
		fmt.Println("似乎接收了一条发给了错误用户的信息:", privateMes.Content)
	} else {
		fmt.Println("用户id为", privateMes.SendUser.UserId, "的:", privateMes.SendUser.UserName, "悄悄的对你说 : ", privateMes.Content)
	}

}
